<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 

    2.1布局原理

        flex是flexible Box的缩写，意为"弹性布局”，用来为盒状模型提供最大的灵活性，任何一个容器（块元素行内元素）都可以指定为flex布局。

        当我们为父盒子设为flex布局以后，子元素的float、clear和vertical-align属性将失效。
        
        伸缩布局=弹性布局=伸缩盒布局=弹性盒布局=flex布局


        采用Flex布局的元素，称为Flex容器( flex container )，简称"容器"。它的所有子元素自动称为容器成员，
        称为Flex项目（flex item )，简称"项目"。

            体验中div 就是flex父容器。

            体验中span就是子容器flex项目
            
            子容器可以横向排列也可以纵向排列


        总结flex布局原理:
            就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式

     -->


     <!-- 

    3.1常见父项属性

        以下由6个属性是对父元素设置的

        flex-direction :设置主轴的方向
        justify-content :设置主轴上的子元素排列方式
        flex-wrap:设置子元素是否换行
        align-content :设置侧轴上的子元素的排列方式(多行)
        align-items :设置侧轴上的子元素排列方式(单行)
        flex-flow :复合属性，相当于同时设置了flex-direction和flex-wrap

      -->

      <!-- 
        3.2 flex-direction设置主轴的方向★
        
        1.主轴与侧轴

            在flex布局中，是分为主轴和侧轴两个方向，同样的叫法有∶行和列、x轴和y轴
            默认主轴方向就是×轴方向，水平向右
            默认侧轴方向就是y轴方向，水平向下

        
        2.属性值

            flex-direction属性决定主轴的方向(即项目的排列方向)
            注意∶主轴和侧轴是会变化的，就看flex-direction设置谁为主轴，剩下的就是侧轴。而我们的子元素是跟着主轴来排列的

            属性值              说明
            row                 默认值从左到右
            row-reverse         从右到左
            column              从上到下
            column-reverse      从下到上

       -->


       <!-- 

        3.3 justify-content设置主轴上的子元素排列方式★

            justify-content属性定义了项目在主轴上的对齐方式

            注意∶使用这个属性之前一定要确定好主轴是哪个

            属性值            说明
            flex-start       默认值从头部开始如果主轴是x轴，则从左到右
            flex-end         从尾部开始排列
            center           在主轴居中对齐（如果主轴是x轴则水平居中)
            space-around     平分剩余空间
            space-between    先两边贴边再平分剩余空间(重要)

        -->

        <!-- 
        3.4 flex-wrap设置子元素是否换行★

            默认情况下，项目都排在一条线(又称”轴线”)上,不会换行，如果一直增加子元素，容器撞不开，会减小子元素的大小以腾出空间放新增的子元素。
            flex-wrap属性定义，flex布局中默认是不换行的.

            属性值          说明
            nowrap          默认值，不换行
            wrap            换行

         -->

    <!-- 

        3.5 align-items设置侧轴上的子元素排列方式(单行，即只有一行元素)★

            该属性是控制子项在侧轴（默认是y轴)上的排列方式在子项为单项的时候使用

            属性值            说明
            flex-start       从上到下
            flex-end         从下到上
            center           挤在一起居中(垂直居中)
            stretch          拉伸〔默认值)

    -->

    <!-- 

        3.6 align-content设置侧轴上的子元素的排列方式(多行)

            设置子项在侧轴上的排列方式并且只能用于子项出现换行的情况(多行），在单行下是没有效果的。

            属性值            说明
            flex-start        默认值在侧轴的头部开始排列
            flex-end          在侧铀的尾部开始排列
            center            在侧轴中间显示
            space-around      子项在侧轴平分裂余空间
            space-between     子项在侧轴先分布在两头，再平分剩余空间
            stretch           设置子项元素高度平分父元素高度

    -->

    <!-- 
    3.6 align-content和align-items区别

        align-items适用于单行情况下，只有上对齐、下对齐、居中和拉伸

        align-content适应于换行(多行)的情况下(单行情况下无效），可以设置上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值。

        总结就是 单行找align-items 多行找align-content

     -->
    
    
     <!-- 
    3.7 flex-flow

        flex-flow属性是flex-direction和flex-wrap属性的复合属性

            flex-flow : row wrap;


        flex-direction :设置主轴的方向

        justify-content : 设置生轴上的子元素排列方式
        
        flex-wrap∶设置子元素是否换行

        align-content :设置侧轴上的子元素的排列方式(多行)
        
        align-items :设置侧轴上的子元素排列方式(单行)

        flex-flow :复合属性，相当于同时设置了flex-direction和flex-wrap
    -->

    <!-- 

    4.flex布局子项常见属性
        
        flex子项目占的份数

        aign-self控制子项自己在侧轴的排列方式
        
        order属性定义子项的排列顺序（前后顺序）

     -->


     <!-- 
    
    4.1 flex属性★

        flex属性定义子项目分配剩余空间，用flex来表示占多少份数。

        .item {
            flex : <number>; /* default 0 */
        )

      -->


    <!-- 

    4.2 align-self 控制子项自己在侧轴上的排列方式

        align-self属性允许单个项目有与其他项目不一样的对齐方式，可覆盖align-items属性。
        默认值为auto，表示继承父元素的align-items属性，如果没有父元素，则等同于stretch。

        span:nth-child(2) {
            /* 设置自己在侧轴上的排列方式 */
            align-self: flex-end;
        }

     -->
    
    <!-- 
        
    4.3 order属性定义项目的排列顺序

        数值越小，排列越靠前，默认为0。
        注意:和z-index不一样。

     -->
</body>
</html>